package com.hmyuan.util;

import javax.servlet.http.HttpServletRequest;

public class RequestMessageUtil {
	 /** 
	   * 获取用户真实IP地址，不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址, 
	   * 
	   * 可是，如果通过了多级反向代理的话，X-Forwarded-For的值并不止一个，而是一串IP值，究竟哪个才是真正的用户端的真实IP呢？ 
	   * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 
	   * 
	   * 如：X-Forwarded-For：192.168.1.110, 192.168.1.120, 192.168.1.130, 
	   * 192.168.1.100 
	   * 
	   * 用户真实IP为： 192.168.1.110 
	   * 
	   * @param request 
	   * @return 
	   */
	  public static String getIpAddress(HttpServletRequest request) { 
	    String ip = request.getHeader("x-forwarded-for"); 
	    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	      ip = request.getHeader("Proxy-Client-IP"); 
	    } 
	    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	      ip = request.getHeader("WL-Proxy-Client-IP"); 
	    } 
	    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	      ip = request.getHeader("HTTP_CLIENT_IP"); 
	    } 
	    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	      ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
	    } 
	    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	      ip = request.getRemoteAddr(); 
	    } 
	    return ip; 
	  } 
	  /** 
	     * 获取操作系统信息 
	     */  
	    public static String getOs(HttpServletRequest request){  
	        String  browserDetails  =   request.getHeader("User-Agent");  
	        String  userAgent       =   browserDetails;  
	  
	        String os = "";  
	  
	        //=================OS Info=======================  
	        if (userAgent.toLowerCase().indexOf("windows") >= 0 )  
	        {  
	            os = "Windows";  
	        } else if(userAgent.toLowerCase().indexOf("mac") >= 0)  
	        {  
	            os = "Mac";  
	        } else if(userAgent.toLowerCase().indexOf("x11") >= 0)  
	        {  
	            os = "Unix";  
	        } else if(userAgent.toLowerCase().indexOf("android") >= 0)  
	        {  
	            os = "Android";  
	        } else if(userAgent.toLowerCase().indexOf("iphone") >= 0)  
	        {  
	            os = "IPhone";  
	        }else{  
	            os = "UnKnown, More-Info: "+userAgent;  
	        }  
	  
	        return os;  
	    }  
	    /** 
	     * 获取浏览器及浏览器版本信息 
	     * @param request 
	     * @return 
	     */  
	    public static String getBrowserInfo(HttpServletRequest request){  
	    	String  browserDetails  =   request.getHeader("User-Agent");  
	    	String  userAgent       =   browserDetails;  
	    	String  user            =   userAgent.toLowerCase();  
	    	
	    	String browser = "";  
	    	//===============Browser===========================  
	    	if (user.contains("edge"))  
	    	{  
	    		browser=(userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");  
	    	} else if (user.contains("msie"))  
	    	{  
	    		String substring=userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];  
	    		browser=substring.split(" ")[0].replace("MSIE", "IE")+"-"+substring.split(" ")[1];  
	    	} else if (user.contains("safari") && user.contains("version"))  
	    	{  
	    		browser=(userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]  
	    				+ "-" +(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];  
	    	} else if ( user.contains("opr") || user.contains("opera"))  
	    	{  
	    		if(user.contains("opera")){  
	    			browser=(userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]  
	    					+"-"+(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];  
	    		}else if(user.contains("opr")){  
	    			browser=((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))  
	    					.replace("OPR", "Opera");  
	    		}  
	    		
	    	} else if (user.contains("chrome"))  
	    	{  
	    		browser=(userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");  
	    	} else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1)  ||  
	    			(user.indexOf("mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) ||  
	    			(user.indexOf("mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1) )  
	    	{  
	    		browser = "Netscape-?";  
	    		
	    	} else if (user.contains("firefox"))  
	    	{  
	    		browser=(userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");  
	    	} else if(user.contains("rv"))  
	    	{  
	    		String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");  
	    		browser="IE" + IEVersion.substring(0,IEVersion.length() - 1);  
	    	} else  
	    	{  
	    		browser = "UnKnown, More-Info: "+userAgent;  
	    	}  
	    	
	    	return browser ;  
	    }  
}
